/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.vista.implementaciones;

import desarrollosoft.ghce.entidades.Prestacion;
import desarrollosoft.ghce.servicio.interfaces.IParserExcepciones;
import desarrollosoft.ghce.servicio.interfaces.IServicioPrestaciones;
import desarrollosoft.ghce.vista.interfaces.Avisable;
import desarrollosoft.ghce.vista.interfaces.Estado;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author ariel
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ControladoraVentanaDetallesAdministracionCirugias {
    
    @WireVariable("servicioPrestaciones")
    private IServicioPrestaciones servicioCirugias;
    
    @WireVariable("parserExcepcionesCirugias")
    private IParserExcepciones parserExcepcionesCirugias;
    
    private Avisable avisable;
    private Estado estado;
    private Prestacion cirugia;
    
    private Prestacion cirugiaAnterior;
    
    private boolean camposSoloLectura;
    
    @Init
    public void inicializar() {
        Execution ejecucion = Executions.getCurrent();
        avisable = (Avisable) ejecucion.getArg().get("avisable");
        estado = (Estado) ejecucion.getArg().get("estado");
        cirugia = (Prestacion) ejecucion.getArg().get("cirugia");
        
        switch (estado) {
            case CONSULTANDO:
                camposSoloLectura = true;
                break;
            case MODIFICANDO:
                cirugiaAnterior = cirugia.clonar();
                camposSoloLectura = false;
                break;
            case CREANDO:
                cirugia = new Prestacion();
                camposSoloLectura = false;
                break;
        }
    }

    @Command("guardar")
    public void clickBotonGuardar() {
        switch (estado) {
            case MODIFICANDO:
                try {
                    servicioCirugias.modificarPrestacion(cirugia);
                    camposSoloLectura = true;
                    avisable.seCerroVentanaHija(null);
                } catch (Exception e) {
                    Messagebox.show(parserExcepcionesCirugias.parsear(e.toString()));
                }
                break;
            case CREANDO:
                try {
                    servicioCirugias.crearPrestacion(cirugia);
                    camposSoloLectura = true;
                    avisable.seCerroVentanaHija(null);
                } catch (Exception e) {
                    Messagebox.show(parserExcepcionesCirugias.parsear(e.toString()));
                }
                break;
        }
    }
    
    @Command("cancelar")
    public void clickBotonCancelar() {
        switch (estado) {
            case MODIFICANDO:
                cirugia.setNombre(cirugiaAnterior.getNombre());
                camposSoloLectura = true;
                break;
            case CREANDO:
                cirugia = new Prestacion();
                camposSoloLectura = true;
                break;
        }
        BindUtils.postNotifyChange(null, null, this, "*");
    }
    
    public Prestacion getCirugia() {
        return cirugia;
    }

    public boolean getCamposSoloLectura() {
        return camposSoloLectura;
    }
    
}
